package com.leecode;

import java.util.ArrayList;
import java.util.List;

/**
 * 438. 找到字符串中所有字母异位词
 *
 * 给定一个字符串 s 和一个非空字符串 p，找到 s 中所有是 p 的字母异位词的子串，返回这些子串的起始索引。
 *
 * 字符串只包含小写英文字母，并且字符串 s 和 p 的长度都不超过 20100。
 *
 * 说明：
 *
 *     字母异位词指字母相同，但排列不同的字符串。
 *     不考虑答案输出的顺序。
 *
 * 示例 1:
 *
 * 输入:
 * s: "cbaebabacd" p: "abc"
 *
 * 输出:
 * [0, 6]
 *
 * 解释:
 * 起始索引等于 0 的子串是 "cba", 它是 "abc" 的字母异位词。
 * 起始索引等于 6 的子串是 "bac", 它是 "abc" 的字母异位词。
 */
public class Leet438 {
	public static void main(String[] args) {

	}

	public List<Integer> findAnagrams(String s, String p) {
		char[] sArr = s.toCharArray();
		char[] pArr = p.toCharArray();

		int sum = 0;
		for (int b = 0; b < p.length(); b++) {
			sum += pArr[b];
		}
		int temp = 0;
		for (int c = 0; c < p.length(); c++) {
			temp += sArr[c];
		}
		List<Integer> list = new ArrayList();
		for (int a = 0; a <= sArr.length - pArr.length; a++) {
			if (a == 0) {

			} else {
				temp = temp - sArr[a - 1] + sArr[a + pArr.length];
			}

			if (temp == sum) {
				list.add(a);
			}
		}

		List res=new ArrayList();
		ex:
		for (int i = 0; i < list.size(); i++) {
			int index = list.get(i);
			char[] pArrTemp = pArr;
			h:
			for (int k = index; k <= index + pArr.length; k++) {
				for (int j = 0; j < pArr.length; j++) {
					if (sArr[index] == pArrTemp[j]) {
						pArrTemp[j] = '0';
						continue h;
					}
				}
				continue ex;
			}
			res.add(index);
		}

		return res;
	}

//	public boolean check
}
